 
package com.simple.mqtt.server.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * 存储和传输的消息模型
 * 表示包含所有相关元数据的MQTT消息
 *
 * @author L.cm
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Message implements Serializable {

	/**
	 * 触发事件的节点
	 */
	private String node;
	/**
	 * MQTT消息ID
	 */
	private Integer id;
	/**
	 * 源客户端ID
	 */
	private String fromClientId;
	/**
	 * 源用户名
	 */
	private String fromUsername;
	/**
	 * 目标客户端ID（主要用于遗嘱消息）
	 */
	private String clientId;
	/**
	 * 目标用户名（主要用于遗嘱消息）
	 */
	private String username;
	/**
	 * MQTT主题
	 */
	private String topic;
	/**
	 * 消息类型
	 */
	private MessageType messageType;
	/**
	 * 消息是否重复
	 */
	private boolean dup;
	/**
	 * 服务质量等级（0, 1, 2）
	 */
	private int qos;
	/**
	 * 消息是否应该被保留
	 */
	private boolean retain;
	/**
	 * 消息负载/内容
	 */
	private byte[] payload;
	/**
	 * 客户端IP地址
	 */
	private String peerHost;
	/**
	 * 存储时间戳
	 */
	private long timestamp;
	/**
	 * PUBLISH消息到达代理的时间（毫秒）
	 */
	private Long publishReceivedAt;
}
